//da funcionalidad a las propiedades de la ventana grafica de proveedores
package vista;

import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;







import controlador.CdProveedores;
import entidades.Proveedor;
import entidades.iOperaciones;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;



public class ControladorProveedor implements Initializable, iOperaciones {
	@FXML
	TextField txtIdProveedor;
	@FXML
	TextField txtNombre;
	@FXML
	TextArea txtDireccion;
	@FXML
	TextField txtTelefono;
	@FXML
	Button btnGuardar;
	@FXML
	Button btnEliminar;
	@FXML
	TableView <Object>tvProveedores;
	@FXML
	TableColumn tcIdProveedor;
	@FXML
	TableColumn tcNombre;
	@FXML
	TableColumn tcDireccion;
	@FXML
	TableColumn tcTelefono;
	
	
	private boolean esnuevo=true;
	private Proveedor proveedor;
	private CdProveedores datosProveedor=new CdProveedores();
	
	private vista.MainApp mainApp;

	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		
		tvProveedores.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>(){

			@Override
			public void changed(ObservableValue<? extends Object> observable,
					Object oldValue, Object newValue) {
				// TODO Auto-generated method stub
				datosProveedor(newValue);
				
			}
			
		});
		// TODO Auto-generated method stub
		llenarTvProveedores();
		btnGuardar.setOnAction(new btnGuardar_Click());
		btnEliminar.setOnAction(new btnEliminar_Click());
	}
	
	private void limpiar(){
		txtIdProveedor.setText("");
		txtNombre.setText("");
		txtDireccion.setText("");
		txtTelefono.setText("");
		
	}
	
	private void datosProveedor(Object seleccionado){
		proveedor=(Proveedor) seleccionado;
		if(proveedor != null){
		esnuevo = false;
		txtIdProveedor.setText(Integer.toString(proveedor.getIdProveedor()));
		txtNombre.setText(proveedor.getNombre());
		txtDireccion.setText(proveedor.getDireccion());
		txtTelefono.setText(proveedor.getTelefono());
		
		
		}
	}
	
	//para llenar la tabla de clientes
	
	public void llenarTvProveedores(){
		List<Object> lista= new ArrayList<Object>();
		try {
			lista = listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(lista);
		tcIdProveedor.setCellValueFactory(new PropertyValueFactory<Proveedor, Integer>("idProveedor"));
		tcNombre.setCellValueFactory(new PropertyValueFactory<Proveedor,String>("nombre"));
		tcDireccion.setCellValueFactory(new PropertyValueFactory<Proveedor,String>("direccion"));
		tcTelefono.setCellValueFactory(new PropertyValueFactory<Proveedor,String>("telefono"));
		tvProveedores.setItems(listaObs);//asigna los elemento de una lista a una nueva lista listaobs
		
	}
		
	private class btnGuardar_Click implements EventHandler<ActionEvent>
	{
			@Override
		public void handle(ActionEvent arg0) {
				if(esnuevo==true){
					proveedor=new Proveedor(txtNombre.getText(),txtDireccion.getText(),txtTelefono.getText());
					try{
						
						if(agregar(proveedor)){
							System.out.println("registro existoso");
							llenarTvProveedores();
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					
				}
				else{
					if(esnuevo==false){
					proveedor.setNombre(txtNombre.getText());
					proveedor.setDireccion(txtDireccion.getText());
					proveedor.setTelefono(txtTelefono.getText());
					
					try{
						
						if(actualizar(proveedor)){
							System.out.println("registro existoso");
							llenarTvProveedores();
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					}
				}
				limpiar();	
			}
				
			
			
			}			
			
			
			
	private class btnEliminar_Click implements EventHandler<ActionEvent>{

		@Override
		public void handle(ActionEvent arg0) {
			// TODO Auto-generated method stub
				
			proveedor.setIdProveedor(Integer.parseInt(txtIdProveedor.getText()));
			proveedor.setNombre(txtNombre.getText());
			proveedor.setDireccion(txtDireccion.getText());
			proveedor.setTelefono(txtTelefono.getText());
			
			
			try{
				
				if(eliminar(proveedor)){
					System.out.println("cliente eliminado exitosamente");
					llenarTvProveedores();
					limpiar();
				}
				else{
					System.out.println("operacin  fallida");
				}	
				
			}
			catch(Exception e){
				System.out.print(e);
				esnuevo=false;
			}	
		}
			
		}		
	
	

	public void setMainApp(vista.MainApp mainApp){
		this.mainApp = mainApp;
	}

	@Override
	public boolean agregar(Object nuevo) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosProveedor.agregar(nuevo);
	}

	@Override
	public boolean actualizar(Object modificado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosProveedor.actualizar(modificado);
	}

	@Override
	public boolean eliminar(Object eliminado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosProveedor.eliminar(eliminado);
	}

	@Override
	public List<Object> listar() throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosProveedor.listar();
	}
	
	

}